{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "vscode": {
     "languageId": "plaintext"
    }
   },
   "source": [
    "# Tutorial 10c - Custom Optimization Algorithms"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "tags": [
     "nbsphinx-toctree"
    ]
   },
   "source": [
    "### November 2024"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This tutorial demonstrates how to define a custom optimization algorithm in Optiland. There are already several optimization algorithms available in Optiland, including a least squares optimizer, dual annealing, differential evolution, and a generic optimizer that wraps `scipy.optimize.minimize`. While the existing algorithms may cover most use cases, it is sometimes necessary to implement a custom algorithm to meet specific requirements.\n",
    "\n",
    "In this tutorial, we will create a _random walk optimizer_, which traverses the design space by making random steps and evaluating the objective function at each step. This is a very simple (and inefficient) strategy for optimization, but it will demonstrate how to integrate a custom algorithm into the Optiland framework."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "from optiland import analysis, optic, optimization"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Our goal will be to optimize the coefficients of an aspheric singlet to minimize the RMS spot size. We start by first defining this singlet with all aspheric coefficients set to zero."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "class AsphericSinglet(optic.Optic):\n",
    "    \"\"\"Aspheric singlet\"\"\"\n",
    "\n",
    "    def __init__(self):\n",
    "        super().__init__()\n",
    "\n",
    "        # add surfaces\n",
    "        self.add_surface(index=0, radius=np.inf, thickness=np.inf)\n",
    "        self.add_surface(\n",
    "            index=1,\n",
    "            thickness=7,\n",
    "            radius=20.0,\n",
    "            is_stop=True,\n",
    "            material=\"N-SF11\",\n",
    "            surface_type=\"even_asphere\",\n",
    "            conic=0.0,\n",
    "            coefficients=[0, 0, 0],\n",
    "        )\n",
    "        self.add_surface(index=2, thickness=21.56201105)\n",
    "        self.add_surface(index=3)\n",
    "\n",
    "        # add aperture\n",
    "        self.set_aperture(aperture_type=\"EPD\", value=20.0)\n",
    "\n",
    "        # add field\n",
    "        self.set_field_type(field_type=\"angle\")\n",
    "        self.add_field(y=0)\n",
    "\n",
    "        # add wavelength\n",
    "        self.add_wavelength(value=0.55, is_primary=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, we need to define our optimization algorithm. This is a class that inherits from `optimization.OptimizerGeneric`. This class has two requirements:\n",
    "\n",
    "1. The constructor must accept the optimization problem as an argument. This is an instance of `optimization.OptimizationProblem`.\n",
    "2. The class must implement the `optimize` method.\n",
    "\n",
    "The optimization algorithm is as follows:\n",
    "\n",
    "1. Get current variable values (\"position\") and the objective function value.\n",
    "2. Save the initial position in case we want to undo the optimization later (optional, but good practice).\n",
    "3. Generate a random step.\n",
    "4. Calculate the objective function at the new position.\n",
    "5. If the new position is better, accept the step.\n",
    "6. Continue for the maximum number of steps.\n",
    "7. Update the variables to the optimal position."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "class RandomWalkOptimizer(optimization.OptimizerGeneric):\n",
    "    def __init__(self, problem):\n",
    "        super().__init__(problem)\n",
    "\n",
    "    def optimize(self, max_steps=100, delta=0.1, seed=42):\n",
    "        # Set random seed\n",
    "        np.random.seed(seed)\n",
    "\n",
    "        # Get current position and objective function value\n",
    "        current_position = [var.value for var in self.problem.variables]\n",
    "        current_value = self._fun(current_position)\n",
    "        num_variables = len(current_position)\n",
    "\n",
    "        # save initial position to be able to revert\n",
    "        self._x.append(current_position)\n",
    "\n",
    "        # Save values of each iteration\n",
    "        values = [current_value]\n",
    "\n",
    "        for _ in range(max_steps):\n",
    "            # Generate a random step\n",
    "            random_step = np.random.randn(num_variables) * delta\n",
    "            new_position = current_position + random_step\n",
    "\n",
    "            # Calculate the objective function value at the new position\n",
    "            new_value = self._fun(new_position)\n",
    "            values.append(new_value)\n",
    "\n",
    "            # If the new value is better, accept the step\n",
    "            if new_value < current_value:\n",
    "                current_position = new_position\n",
    "                current_value = new_value\n",
    "\n",
    "        # Update the variables with the best position\n",
    "        for idvar, var in enumerate(self.problem.variables):\n",
    "            var.update(current_position[idvar])\n",
    "\n",
    "        return values"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's create and draw the starting point lens."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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gxLDDBERERERDUoMM0RERERENCj1WWvmgex4A7eWlhaRKyEiIiIiov92/HP6jzVeDsowc/wvJznJJnIlRERERER0Ji0tLTAYDGe8PyjXmfF6vaioqEBoaCgkEolodTgcDlitVpSVlXG9G/pRPF/oXPB8oXPB84XOBc8XOhc/93wRBAEtLS0wm82QSs88MyYoR2akUini4uLELsNPr9fzlwH9ZDxf6FzwfKFzwfOFzgXPFzoXP+d8OduIzHFsAEBERERERIMSwwwREREREQ1KDDMiUqlUeOihh6BSqcQuhQYBni90Lni+0Lng+ULngucLnYu+Pl+CsgEAERERERENfhyZISIiIiKiQYlhhoiIiIiIBiWGGSIiIiIiGpQYZoiIiIiIaFBimCEiIiIiokGJYUYExcXFuO2222Cz2RASEoLk5GQ89NBD6Ozs7LHfnj17MGXKFKjValitVjz22GMiVUxi+/Of/4yJEydCo9EgLCzstPuUlpbisssug0ajQUxMDP7nf/4HXV1d/VsoDRhPP/00EhMToVarMX78eGzdulXskmgA2LBhA+bMmQOz2QyJRIL333+/x/2CIODBBx+EyWRCSEgIZs6cicOHD4tTLIlq5cqVGDt2LEJDQxETE4O5c+eisLCwxz4dHR248847ERkZCZ1Oh3nz5qG6ulqkiklMzz77LLKysqDX66HX65GTk4PPPvvMf39fnisMMyI4ePAgvF4vVq1ahX379uHxxx/Hc889h9///vf+fRwOBy6++GIkJCRgx44d+Otf/4o//vGPWL16tYiVk1g6Ozsxf/583HHHHae93+Px4LLLLkNnZyfy8vLwyiuv4OWXX8aDDz7Yz5XSQPDmm29i2bJleOihh7Bz506MGDECs2bNQk1NjdilkcicTidGjBiBp59++rT3P/bYY3jqqafw3HPPYcuWLdBqtZg1axY6Ojr6uVIS2/fff48777wTmzdvxldffQW3242LL74YTqfTv8+9996Ljz76CG+//Ta+//57VFRU4OqrrxaxahJLXFwc/vKXv2DHjh3Yvn07LrzwQlx55ZXYt28fgD4+VwQaEB577DHBZrP5bz/zzDNCeHi44HK5/Nt+97vfCSkpKWKURwPEmjVrBIPBcMr2Tz/9VJBKpUJVVZV/27PPPivo9foe5xAFh3Hjxgl33nmn/7bH4xHMZrOwcuVKEauigQaA8N577/lve71ewWg0Cn/961/925qamgSVSiX8+9//FqFCGkhqamoEAML3338vCILv3FAoFMLbb7/t3+fAgQMCACE/P1+sMmkACQ8PF1544YU+P1c4MjNANDc3IyIiwn87Pz8fU6dOhVKp9G+bNWsWCgsL0djYKEaJNIDl5+cjMzMTsbGx/m2zZs2Cw+HwfytCwaGzsxM7duzAzJkz/dukUilmzpyJ/Px8ESujgc5ut6OqqqrHuWMwGDB+/HieO4Tm5mYA8H9W2bFjB9xud4/zJTU1FfHx8TxfgpzH48G6devgdDqRk5PT5+cKw8wAUFRUhH/+859YunSpf1tVVVWPD6YA/Lerqqr6tT4a+Hi+0HF1dXXweDynPR94LtDZHD8/eO7Qf/N6vbjnnnswadIkZGRkAPCdL0ql8pR5nDxfgtfevXuh0+mgUqnwy1/+Eu+99x7S09P7/FxhmOlF999/PyQSyVl/Dh482OOY8vJyzJ49G/Pnz8fixYtFqpzE8HPOFyIiov525513oqCgAOvWrRO7FBrAUlJSsGvXLmzZsgV33HEHFixYgP379/f588r7/BmCyH333YeFCxeedZ+kpCT/nysqKjB9+nRMnDjxlIn9RqPxlC4Px28bjcbeKZhEda7ny9kYjcZTulXxfAlOUVFRkMlkp/39wXOBzub4+VFdXQ2TyeTfXl1djZEjR4pUFYntrrvuwscff4wNGzYgLi7Ov91oNKKzsxNNTU09vnHn75rgpVQqMWTIEABAdnY2tm3bhieffBLXXnttn54rDDO9KDo6GtHR0T9p3/LyckyfPh3Z2dlYs2YNpNKeg2Q5OTn43//9X7jdbigUCgDAV199hZSUFISHh/d67dT/zuV8+TE5OTn485//jJqaGsTExADwnS96vR7p6em98hw0OCiVSmRnZ2P9+vWYO3cuAN8lIuvXr8ddd90lbnE0oNlsNhiNRqxfv94fXhwOh/9bVgougiDg7rvvxnvvvYfvvvsONputx/3Z2dlQKBRYv3495s2bBwAoLCxEaWkpcnJyxCiZBhiv1wuXy9Xn5wrDjAjKy8sxbdo0JCQk4G9/+xtqa2v99x1PqDfccANWrFiB2267Db/73e9QUFCAJ598Eo8//rhYZZOISktL0dDQgNLSUng8HuzatQsAMGTIEOh0Olx88cVIT0/HzTffjMceewxVVVV44IEHcOedd0KlUolbPPW7ZcuWYcGCBRgzZgzGjRuHJ554Ak6nE4sWLRK7NBJZa2srioqK/Lftdjt27dqFiIgIxMfH45577sGf/vQnDB06FDabDX/4wx9gNpv9wZiCx5133om1a9figw8+QGhoqH9ug8FgQEhICAwGA2677TYsW7YMERER0Ov1uPvuu5GTk4MJEyaIXD31t+XLl+OSSy5BfHw8WlpasHbtWnz33Xf44osv+v5cOe9+aHTO1qxZIwA47c/Jdu/eLUyePFlQqVSCxWIR/vKXv4hUMYltwYIFpz1fvv32W/8+xcXFwiWXXCKEhIQIUVFRwn333Se43W7xiiZR/fOf/xTi4+MFpVIpjBs3Tti8ebPYJdEA8O233572d8mCBQsEQfC1Z/7DH/4gxMbGCiqVSpgxY4ZQWFgobtEkijN9TlmzZo1/n/b2duFXv/qVEB4eLmg0GuGqq64SKisrxSuaRHPrrbcKCQkJglKpFKKjo4UZM2YIX375pf/+vjxXJIIgCOcfiYiIiIiIiPoXu5kREREREdGgxDBDRERERESDEsMMERERERENSgwzREREREQ0KDHMEBERERHRoMQwQ0REREREgxLDDBERERERDUoMM0RERERENCgxzBARERER0aDEMENERERERIMSwwwREREREQ1K/x80QQjPy47qdwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1000x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "lens = AsphericSinglet()\n",
    "lens.draw(num_rays=5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We now create the optimization problem, add our operand (RMS spot size target) and variables (3 aspheric coefficients)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "problem = optimization.OptimizationProblem()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "input_data = {\n",
    "    \"optic\": lens,\n",
    "    \"surface_number\": -1,\n",
    "    \"Hx\": 0,\n",
    "    \"Hy\": 0,\n",
    "    \"num_rays\": 5,\n",
    "    \"wavelength\": 0.55,\n",
    "    \"distribution\": \"hexapolar\",\n",
    "}\n",
    "\n",
    "# add RMS spot size operand\n",
    "problem.add_operand(\n",
    "    operand_type=\"rms_spot_size\",\n",
    "    target=0,\n",
    "    weight=1,\n",
    "    input_data=input_data,\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "problem.add_variable(lens, \"asphere_coeff\", surface_number=1, coeff_number=0)\n",
    "problem.add_variable(lens, \"asphere_coeff\", surface_number=1, coeff_number=1)\n",
    "problem.add_variable(lens, \"asphere_coeff\", surface_number=1, coeff_number=2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We print the optimization problem info to see the current status."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "+----+------------------------+-------------------+\n",
      "|    |   Merit Function Value |   Improvement (%) |\n",
      "|----+------------------------+-------------------|\n",
      "|  0 |               0.612344 |                 0 |\n",
      "+----+------------------------+-------------------+\n",
      "+----+----------------+----------+----------+----------+----------+--------------------+\n",
      "|    | Operand Type   |   Target |   Weight |    Value |    Delta |   Contribution (%) |\n",
      "|----+----------------+----------+----------+----------+----------+--------------------|\n",
      "|  0 | rms spot size  |        0 |        1 | 0.782524 | 0.782524 |                100 |\n",
      "+----+----------------+----------+----------+----------+----------+--------------------+\n",
      "+----+-----------------+-----------+---------+--------------+--------------+\n",
      "|    | Variable Type   |   Surface |   Value | Min. Bound   | Max. Bound   |\n",
      "|----+-----------------+-----------+---------+--------------+--------------|\n",
      "|  0 | asphere_coeff   |         1 |       0 |              |              |\n",
      "|  1 | asphere_coeff   |         1 |       0 |              |              |\n",
      "|  2 | asphere_coeff   |         1 |       0 |              |              |\n",
      "+----+-----------------+-----------+---------+--------------+--------------+\n"
     ]
    }
   ],
   "source": [
    "problem.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's now create an optimizer using our `RandomWalkOptimizer` class. We pass the optimization problem as an argument."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "optimizer = RandomWalkOptimizer(problem)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Finally, we can run the optimization by calling the `optimize`. We choose to run the optimization for 1000 steps and use a `delta` value of 0.1. The `delta` value controls the size of the step in each iteration."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "values = optimizer.optimize(max_steps=1000, delta=0.1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "On the author's machine, the optimization completes in 2 seconds. Let's print the problem information to see whether optimization was successful."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "+----+------------------------+-------------------+\n",
      "|    |   Merit Function Value |   Improvement (%) |\n",
      "|----+------------------------+-------------------|\n",
      "|  0 |            5.48352e-06 |           99.9991 |\n",
      "+----+------------------------+-------------------+\n",
      "+----+----------------+----------+----------+------------+------------+--------------------+\n",
      "|    | Operand Type   |   Target |   Weight |      Value |      Delta |   Contribution (%) |\n",
      "|----+----------------+----------+----------+------------+------------+--------------------|\n",
      "|  0 | rms spot size  |        0 |        1 | 0.00234169 | 0.00234169 |                100 |\n",
      "+----+----------------+----------+----------+------------+------------+--------------------+\n",
      "+----+-----------------+-----------+--------------+--------------+--------------+\n",
      "|    | Variable Type   |   Surface |        Value | Min. Bound   | Max. Bound   |\n",
      "|----+-----------------+-----------+--------------+--------------+--------------|\n",
      "|  0 | asphere_coeff   |         1 | -0.000260867 |              |              |\n",
      "|  1 | asphere_coeff   |         1 | -8.99569e-06 |              |              |\n",
      "|  2 | asphere_coeff   |         1 | -3.55134e-08 |              |              |\n",
      "+----+-----------------+-----------+--------------+--------------+--------------+\n"
     ]
    }
   ],
   "source": [
    "problem.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Indeed, the objective function value is minimized. We also draw the lens and generate the spot diagram to confirm."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1000x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "lens.draw(num_rays=5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1200x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "spot = analysis.SpotDiagram(lens)\n",
    "spot.view()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Recall that we also saved the values of the objective function in each iteration. We can now use these values to plot the convergence of the objective function over the 1000 iterations."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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goKCRNu2bUVJSYm5fe3atQKAGD9+vLntRgVLZUzLbtq0SWRlZYmLFy+K5cuXi8DAQKFSqcTFixfNy5aVlQmNRmOx/tWrV0VwcLDFe2n641a/fn2L93316tUCgPjf//5nbouOjhYNGjQQubm55raNGzdavWerVq0SAMRHH31ksf+BAwcKSZLE6dOnzW0AhEqlEufOnTO3mYqTkJAQkZ+fb25PSkoSACyWrcyRI0cEAPHhhx8KIYTQ6XTC09NTLFq0SAghRHBwsJg3b54QQoj8/HxzkWty/WdVCCH69Olj9R+PmxU3BQUFonv37iIgIMCimLyR6Oho4evre9NlZs6cKQCINWvWWOwvLCzMIk8//vijACDmzJljbuvXr5/VfxqEuHFxA0BMnjzZ3Hb16lXh7u4uJEkSS5YsMbcfP35cABATJkywykPF4rKikpISERMTI0JDQ8Xly5eFEEKcP39eyOVyMWnSJItlDx06JNzc3Czau3fvLgCI5OTkGyeLHIKnpchmplM13t7eVVp+3bp1AIDExESL9rFjxwKA1dicqKgo8+kLAAgMDESrVq1w9uxZc9ugQYOg0+mwcuVKc9vGjRuRm5trPs8vhMCKFSvw0EMPQQiB7Oxs80+fPn2Ql5eHffv2Wex76NChcHd3N0//888/OHToEIYMGQIvLy9ze/fu3dGuXTuLdZctWwZfX1/06tXLYl8xMTHw8vKyOs1SleNcsWIF2rdvbzHg1ESSJPN+W7dujcjISIv93n///QBQ6RU3Jn/++ScyMzPx6quvWow96NevHyIjI2973FR8fDwCAwMRHh6OgQMHwtPTE2vWrEHDhg3Ny8jlcvOAToPBgJycHJSVlSE2Ntbq/QGM772/v7952pRDU94uX76MAwcOYOjQofD19TUv16tXL0RFRVlsa926dZDL5Xjttdcs2seOHQshBH755ReL9p49e1qcijSdlnnssccsvg+m9orvZWVat26N+vXrm8fSHDx4EEVFRearobp06YLt27cDMI7F0ev1FuNtKn5W8/LykJ2dje7du+Ps2bPIy8u76b5N6/Tu3RvHjx/Hli1bEB0dfct1CgoKbvndN803/a4wGTJkiMW6AwcORIMGDcy/I6rrhRdeML/28/NDq1at4OnpaTGuq1WrVvDz87vle1LRq6++ikOHDmHFihUICQkBAKxcuRIGgwFPPPGExfctJCQELVq0sPq+qVQqDB8+/LaOj2zHAcVkMx8fHwDGX3JVceHCBchkMjRv3tyiPSQkBH5+frhw4YJFe6NGjay24e/vbzFupX379oiMjMTSpUvx/PPPAwCWLl2KgIAA8x/1rKws5ObmYv78+Te8ass0SNakSZMmVrEDsIrd1Fbxj++pU6eQl5eHoKCgKu2rKsd55swZPPbYY5Vur+J+jx07hsDAwCrttyLT8bVq1cpqXmRkpNWAVlvNmzcPLVu2RF5eHhYsWICtW7dCpVJZLbdo0SJ88sknOH78OHQ6nbn9+vcDsM6bqdAx5c10TC1atLBat1WrVhbv2YULFxAaGmr1x7p169YW27rRvk3FU3h4eKXt14+1up4kSejSpQu2bt0Kg8GA7du3IygoyPx569KlC+bOnQsA5iKnYnGzfft2TJgwATt37kRxcbHFtvPy8iyKu8qMHj0apaWl2L9/P9q0aXPTZU28vb0txntVxvS74fq8Xv+eSJKE5s2bV2l80o2o1Wqrz76vry8aNmxo/g9AxfZbvScmX375Jb755ht8+eWX+Ne//mVuP3XqFIQQlX6+AFhdzRUWFsarsVyAxQ3ZzMfHB6GhoTh8+LBN613/i+ZG5HJ5pe3iugGegwYNwqRJk5CdnQ1vb2+sWbMGTz31FNzcjB9r00DMZ555xjwY9np33XWXxXTF/wnbymAwICgoCN99912l86//BVzV46zKftu1a4eZM2dWOv/6P7zO1KlTJ/PVUgMGDEC3bt3w9NNP48SJE+aesP/+978YNmwYBgwYgDfeeANBQUGQy+WYMmWKxcBjE3vlrTputO/bialbt2743//+h0OHDmH79u0W97Dp0qUL3njjDVy6dAnbtm1DaGgomjZtCsBY+Pbs2RORkZGYOXMmwsPDoVQqsW7dOsyaNctiIPKNPPLII1iyZAmmTp2Kb7/9tkpXBrZu3RoHDhxAWlpapQU6APz1118AYNVT5giOeE92796NUaNG4YUXXsCLL75oMc9gMECSJPzyyy+V7qNiDy9we79TqPpY3FC19O/fH/Pnz8fOnTsRFxd302UbN24Mg8GAU6dOmf9HDAAZGRnIzc1F48aNqxXDoEGDMHHiRKxYsQLBwcHIz8+3uP9HYGAgvL29odfrq3xflspiB4DTp09bzbu+rVmzZti0aRO6du1qt19ozZo1u2UR2axZMxw8eBA9e/ascgFpYjq+EydOmHu8TE6cOFHt96YypoLlvvvuw9y5czFu3DgAwPLly9G0aVOsXLnSIv4JEyZUaz+mmE+dOmU178SJE1bLbtq0yepUy/Hjxy225UgV73ezfft2i/u7xMTEQKVSYcuWLdi1axf69u1rnve///0PGo0Ga9assSgybnYa8noDBgxA7969MWzYMHh7e1fpSqv+/fvjhx9+wLfffot3333Xan5+fj5Wr16NyMhIqx7P698TIQROnz5t8Z8MWz/D9paVlYWBAwciOjrafNVVRc2aNYMQAk2aNEHLli1dECFVBcfcULW8+eab8PT0xAsvvICMjAyr+WfOnMGcOXMAwPwL+fq7jpp6Gvr161etGFq3bo127dph6dKlWLp0KRo0aIB7773XPF8ul+Oxxx4zX7p6vaysrFvuIzQ0FG3btsW3336LwsJCc/tvv/1mvgTY5IknnoBer8eHH35otZ2ysrJqPargsccew8GDByu9jNn0P9AnnngCly5dwldffWW1TElJCYqKim64/djYWAQFBSE5OdnisvFffvkFx44dq/Z7cyM9evRAp06dMHv2bJSWlgK49j/siv+j3rVrF3bu3FmtfTRo0ADR0dFYtGiRxbiTlJQUHD161GLZvn37Qq/Xm0/9mMyaNQuSJOHBBx+sVgy2iI2NhVqtxnfffYdLly5Z9NyoVCrcfffdmDdvHoqKiixOSVWWt7y8PHzzzTc27X/IkCH49NNPkZycjLfeeuuWyw8cOBBRUVGYOnUq/vzzT4t5BoMBr7zyCq5evVppcfrtt99anM5evnw5Ll++bJFnT0/PKo0XcgS9Xo8nn3wSWq0WK1asqPR00qOPPgq5XI6JEyda9QIJIXDlyhVnhUs3wZ4bqpZmzZrh+++/x6BBg9C6dWuLOxTv2LEDy5YtM98HpX379hg6dCjmz5+P3NxcdO/eHbt378aiRYswYMAAizuw2mrQoEEYP3481Go1nn/+eatu9alTp2Lz5s3o3LkzRowYgaioKOTk5GDfvn3YtGkTcnJybrmPyZMn45FHHkHXrl0xfPhwXL16FXPnzkXbtm0tCp7u3bvjpZdewpQpU3DgwAH07t0bCoUCp06dwrJlyzBnzhwMHDjQpuN74403sHz5cjz++ON47rnnEBMTg5ycHKxZswbJyclo3749nn32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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(values)\n",
    "plt.xlabel(\"Iteration\")\n",
    "plt.ylabel(\"Objective Function Value\")\n",
    "plt.title(\"Convergence of Random Walk Optimizer\")\n",
    "plt.grid(True)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can clearly see that the optimization converges within about 250 iterations. We can therefore conclude that the random walk optimizer is effective for this problem. For improved performance, we might consider adding a stopping condition in the future to avoid unnecessary iterations."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Conclusions:\n",
    "\n",
    "- This tutorial showed how to add custom optimization algorithms in Optiland.\n",
    "- A custom optimizer inherits from `optimization.OptimizerGeneric` and it must 1) accept the optimization problem as an argument and 2) implement the `optimize` method.\n",
    "- The methods shown here can be used to define any arbitrary optimization algorithm. Likewise, existing optimization libraries can be built into Optiland using this approach."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": ".venv",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
